#include "accesomodos.h"

AccesoModos::AccesoModos()
{
}

AccesoModos::~AccesoModos()
{
}

bool AccesoModos::obtenerListaModos(QList<DatosModo>& listaModos)
{
    QSqlQuery query;
    if (!ejecutar(query, "select * from Modos")) {
        return false;
    }
    
    while (query.next()) {
        DatosModo datos;
        recuperarValores(query.record(), datos);
        listaModos.append(datos);
    }

    return true;
}

bool AccesoModos::obtenerModo(int codigo, DatosModo& datos)
{
    return obtenerModo(QString("select * from Modos where modCodigo = %1").arg(codigo), datos);
}

bool AccesoModos::obtenerModo(const QString& cadenaSql, DatosModo& datos)
{
    QSqlQuery query;
    if (!ejecutar(query, cadenaSql)) {
        return false;
    }
    
    if (query.next()) {        
        recuperarValores(query.record(), datos);
    }

    return true;
}

bool AccesoModos::insertar(const DatosModo& datos)
{
    SentenciaSql sentencia;
    sentencia.setInsert("Modos");
    asignarValores(sentencia, datos);

    bool ok = ejecutar(sentencia.toString());
    if (!ok) {
        return false;
    }
    return true;
}

bool AccesoModos::modificar(int codigo, const DatosModo& datos)
{
    SentenciaSql sentencia;
    sentencia.setUpdate("Modos");
    sentencia.setWhere("modCodigo = " + QString::number(codigo));
    asignarValores(sentencia, datos);

    return ejecutar(sentencia.toString());
}

bool AccesoModos::eliminar(const DatosModo& datos)
{
    SentenciaSql sentencia;
    sentencia.setDelete("Modos");
    sentencia.setWhere("modCodigo = " + QString::number(datos.codigo));
    asignarValores(sentencia, datos);

    return ejecutar(sentencia.toString());
}

//bool AccesoModos::guardar(DatosModo& datos)
//{
//    if (datos.id != ID_INVALIDO) {
//        return modificar(datos);
//    }
//
//    DatosModo datosModoExistente;        
//    if (datos.datosModoDefinida.id != ID_INVALIDO &&
//        obtenerModoDePruebaYModoDefinida(datos.idPrueba, datos.datosModoDefinida.id, datosModoExistente)) {
//        datos.id = datosModoExistente.id;
//        return modificar(datos);
//    }
//    return insertar(datos);
//}


void AccesoModos::asignarValores(SentenciaSql& sentencia, const DatosModo& datos)
{    
    sentencia.asignar("modCodigo", datos.codigo);
    sentencia.asignar("modNombre", datos.nombre);
    sentencia.asignar("modAlias", datos.alias);
    sentencia.asignar("modNumeroNotas", datos.numeroNotas);
}

void AccesoModos::recuperarValores(QSqlRecord& record, DatosModo& datos)
{
    datos.codigo = record.value("modCodigo").toInt();
    datos.nombre = record.value("modNombre").toString();
    datos.alias = record.value("modAlias").toString();
    datos.numeroNotas = record.value("modNumeroNotas").toInt();  

}